package com.smit.dvb.setup;


import com.smit.adapter.DVBAdapter;
import com.smit.dvb.DVBFreqInfo;
import com.smit.dvb.DVBServiceInfo;
import com.smit.dvb.DVBTimeInfo;
import com.smit.dvb.DVBTunerInfo;

import java.util.ArrayList;
import java.util.List;

/**
 * DVB设置
 */
public class SetupControl {
    private static final String TAG = "SetupControl";
    private final List<ISetupCallback> setupCallbackList = new ArrayList<ISetupCallback>();

    /**
     * <p> 添加一个setup回调 <br/>
     *
     * @param callback 回调接口
     */
    public void addCallback(ISetupCallback callback) {
        if (!setupCallbackList.contains(callback)) {
            setupCallbackList.add(callback);
        }
    }

    /**
     * <p> 移除一个setup回调 <br/>
     *
     * @param callback 回调接口<br/>
     */
    public void removeCallback(ISetupCallback callback) {
        if (setupCallbackList.contains(callback)) {
            setupCallbackList.remove(callback);
        }
    }

    /**
     * <p> 获取所有setup回调对象 <br/>
     *
     * @return 返回所有注册进来的回调
     */
    public List<ISetupCallback> getCallbackList() {
        return setupCallbackList;
    }



    /**
     * 设置频点表
     *
     * @param freqInfos 频点表
     */
    public void setFrequencyTable(DVBFreqInfo[] freqInfos) {
        DVBAdapter.getInstance().getDVBManager().getDVBService().setFrequencyTable(freqInfos);
    }

    /**
     * 设置DVB插件路径
     * @param pluginPath 插件文件全路径
     */
    public void setDVBPluginPath(String pluginPath) {
        DVBAdapter.getInstance().getDVBManager().getDVBService().setDVBPluginPath(pluginPath);
    }

    /**
     * 获取Service Group ID
     *
     * @return 节目分组ID
     */
    public int getServiceGroupId() {
        return DVBAdapter.getInstance().getDVBManager().getDVBService().getServiceGroupId();
    }

    /**
     * 设置节目组id
     *
     * @param groupId
     *            组id
     */
    public void setServiceGroupId(int groupId) {
        DVBAdapter.getInstance().getDVBManager().getDVBService().setServiceGroupId(groupId);
    }

    /**
     * 恢复DVB默认参数
     */
    public void restoreSettings() {
        DVBAdapter.getInstance().getDVBManager().getDVBService().restoreSettings();
    }

    /**
     * 获取DVB码流中的时间信息
     *
     * @return 时间信息
     */
    public DVBTimeInfo getDVBTime() {
        return DVBAdapter.getInstance().getDVBManager().getDVBService().getDVBTime();
    }

    /**
     * 获取当前节目频点
     *
     * @return 频点
     */
    public int getCurrentFrequency() {
        return 0;
    }

    /**
     * 手动锁台
     *
     * @param tunerInfo tuner参数
     * @return 0 成功，其他失败
     */
    public int manualTune(DVBTunerInfo tunerInfo) {
           return DVBAdapter.getInstance().getDVBManager().getDVBService().manualTune(tunerInfo);
    }

    /**
     * 获取 tuner状态
     * @param block true底层实时获取然后返回, false底层直接返回上次更新的状态
     * @return tuner信息
     */
    public DVBTunerInfo getTunerStatus(boolean block) {
        return DVBAdapter.getInstance().getDVBManager().getDVBService().getTunerStatus(block);
    }
    /**
     * 开始导入DVB Services
     */
    public void startImportServices() {
        DVBAdapter.getInstance().getDVBManager().getDVBService().startImportServices();
    }

    /**
     * 导入DVB Services
     *
     * @param services  要导入的Services
     * @param size      个数
     * @param groupId   分组
     * @param groupName 分组名
     * @return 成功导入的个数
     */
    public int importServices(DVBServiceInfo[] services, int size, int groupId, String groupName) {
            return DVBAdapter.getInstance().getDVBManager().getDVBService().importServices(services, size, groupId,
                groupName);
    }

    /**
     * 导入结束
     */
    public void finishImportServices() {
        DVBAdapter.getInstance().getDVBManager().getDVBService().finishImportServices();
    }
}